// 通用工具函数

const log4js = require('./log4j')
const { SECRET_KEY } = require('../config/index.js')
const jwt = require("jsonwebtoken");

//状态码
const CODE = {
    SUCCESS: 200,
    PARAM_ERROR: 10001, //参数错误
    USER_ACCOUNT_ERROR: 20001, //账号或密码错误
    USER_LOGIN_ERROR: 30001, // 用户未登录
    BUSINESS_ERROR: 40001, //业务请求失败
    AUTH_ERROR: 50001 //认证失败或TOKEN过期
}

module.exports = {
    CODE,
    // 分页结构封装
    pager({ pageNum = 1, pageSize = 10 }) {
        pageNum *= 1
        pageSize *= 1
        const skipIndex = (pageNum - 1) * pageSize
        return {
            page: {
                pageNum,
                pageSize
            },
            skipIndex
        }
    },
    // 提示信息
    success(data = '', msg = '请求成功', code = CODE.SUCCESS) {
        log4js.debug(data)
        return { data, msg, code }
    },
    fail(msg = '', code = CODE.BUSINESS_ERROR) {
        log4js.debug(msg)
        return { msg, code }
    },
    getTreeMenu(rootList, id, list) {
        // 遍历一级菜单
        for (let i = 0; i < rootList.length; i++) {
            let item = rootList[i]
            // 判断如果是一级菜单，parentId 为 null，把下级菜单添加到 list中
            // slice: 防止改变原有对象，快速克隆
            // string: buff转字符串
            if (String(item.parentId.slice().pop()) == String(id)) {
                list.push(item._doc)
            }
        }
        // 遍历二级菜单
        list.map(item => {
            item.children = []
            // 递归遍历，如果 item._id 等于 parentId 则添加到 item.children 中
            this.getTreeMenu(rootList, item._id, item.children)
            if (item.children.length == 0) {
                delete item.children
            } else if (item.children[0].menuType == 2) {
                // 快速区分按钮和菜单，用于后期做菜单按钮权限控制
                item.action = item.children
            }
        })
        return list
    },
    decoded(authorization) {
        if (authorization) {
            // let token = authorization.split(' ')[1]
            let token = JSON.parse(authorization)
            return jwt.verify(token, SECRET_KEY)
        }
        return ''
    }
}